package com.project.sianet.fragment;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpVersion;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

import com.project.sianet.MainActivity;
import com.project.sianet.R;
import com.project.sianet.data.ProfesorArrayAdapter;
import com.project.sianet.data.Client.ProfesorClient;
import com.project.sianet.data.HttpClient.ProfesorHttpClient;
import com.project.sianet.entidades.Alumno;
import com.project.sianet.entidades.Profesor;
import com.project.sianet.entidades.Mensaje;
import com.project.sianet.entidades.enumerator.TipoMensaje;
import com.project.sianet.util.AlertDialogManager;
import com.project.sianet.util.ConnectionDetector;
import com.project.sianet.util.SessionManager;
import com.project.sianet.util.extenders.SianetApplication;

public class ProfesoresFragment extends Fragment {
	
	// Session Manager Class
//    SessionManager session;
	
	private String mTitleFrag;
	private int mSubTitleFrag;
	private Alumno mAlumno;
	//private Fragment mContent;
	private List<Profesor> mProfesores= new ArrayList<Profesor>();
	private String lastRequestURI;
	private ProfesorClient client;
	private ProgressDialog progressDialog = null;
	
	// Clase Connection detector
    ConnectionDetector cd;
	
    public ProfesoresFragment() {}
    
    public static final ProfesoresFragment newInstance(Alumno alu) {
    	ProfesoresFragment f = new ProfesoresFragment();
    	Bundle args = new Bundle();
    	args.putParcelable("mAlumno", alu);
    	args.putString("mTitleFrag", alu.getNombreCompleto());
    	args.putInt("mSubTitleFrag", R.string.subtitle_bar_Profesores);
    	f.setArguments(args);
    	return f;
    }
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		return inflater.inflate(R.layout.fragment_profesores, null);
	}
	
	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);

		// Creo la instancia de Connection detector
        cd = new ConnectionDetector(getActividad().getApplicationContext());

        mAlumno = getArguments().getParcelable("mAlumno");
    	mTitleFrag = getArguments().getString("mTitleFrag");
    	mSubTitleFrag = getArguments().getInt("mSubTitleFrag");
		
		TextView title = (TextView)this.getActivity().findViewById(R.id.tv_title);
		TextView subtitle = (TextView)this.getActivity().findViewById(R.id.tv_subTitle);
		subtitle.setVisibility(View.VISIBLE);
		title.setText(mTitleFrag);
		subtitle.setText(mSubTitleFrag);
			
		cargarProfesores();

		//setSlidingActionBarEnabled(false);
        
	}

    private void switchFragment(Fragment fragment) {
 		if (getActivity() == null)
 			return;
 		
 		if (getActivity() instanceof MainActivity) {
 			MainActivity ma = (MainActivity) getActivity();
 			ma.switchContent(fragment);
 		}
 	}
	
	private void cargarProfesores() {
		
		new TareaWSObtenerProfesores().execute();
		
	}
	
	private class TareaWSObtenerProfesores extends AsyncTask<String,Integer,List<Profesor>> {
		
		@Override
        protected void onPreExecute(){ 
           super.onPreExecute();
           
           progressDialog = new ProgressDialog(getActividad());
           progressDialog.setCancelable(false);
           progressDialog.show();        
           progressDialog.setContentView(R.layout.custom_progressdialog);

        }
		
		@Override
		protected List<Profesor> doInBackground(String... params) {

			if (cd.hayConexionAInternet()) {
				try {
					ProfesorClient client = getProfesorClient();
					
					if (client != null)
						return client.getAllByAlumno(mAlumno.login, SessionManager.usuarioLogeado());
					else
						return null;
					
				} catch (Exception ex) {
					return new ArrayList<Profesor>();
				}
			} else
				return null;
			
		}
		
		protected void onPostExecute(List<Profesor> profesores) {
			
			progressDialog.dismiss();
			
			if (profesores == null) {
				switchFragment(new NetworkLostFragment());
				return;
			}
			
			if (profesores.size() > 0) {
	            	
				mProfesores = profesores;

		        ProfesorArrayAdapter adapter = new  ProfesorArrayAdapter(getActividad(), R.layout.mishijos_list, mProfesores);
				ListView lv = (ListView) getActividad().findViewById(R.id.lv_profesores);
				lv.setAdapter(adapter);
				
				lv.setOnItemClickListener(new OnItemClickListener() {
					
		            @Override
		            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		            	onSelectedProfesorItemClick(parent, view, position, id);
		            }
	            
				});
	            	
			} else {
	            	
				AlertDialogManager.showToastMessage(getActividad(), getString(R.string.no_hay_profesores_asignados));
	            	
			}
			
		}
		
	}
	
	private void onSelectedProfesorItemClick(AdapterView<?> parent, View view, int position, long id) { 
    	ProfesorArrayAdapter arrayProfesor = (ProfesorArrayAdapter) parent.getAdapter();
    	Profesor prof = arrayProfesor.getItem(position);
    	Mensaje msje = new Mensaje(0, SessionManager.usuarioLogeado(), SessionManager.usuarioLogeado(), prof.getNombreCompleto(), prof.getLogin(), "", "", null, false, 0, false, "", "", null, new ArrayList<String>());
    	Fragment newContent = MensajesDetalleFragment.newInstance(msje, TipoMensaje.Nuevo);
    	switchFragment(newContent);
    	
    }
	
	private Activity getActividad(){
		return this.getActivity();
	}
	
	private ProfesorClient getProfesorClient() {
        
        String requestURI = SianetApplication.getRequestURI(getActividad());
		if (requestURI != null) {
	        if (client == null || !requestURI.equals(lastRequestURI)) {
	            BasicHttpParams params = new BasicHttpParams();
	            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
	            HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
	            HttpProtocolParams.setUseExpectContinue(params, false);
//	            client = ProxyFactory.create(ProfesorClient.class, requestURI, new ApacheHttpClient4Executor(params));
	            client = new ProfesorHttpClient(getActividad());
	            lastRequestURI = requestURI;
	        }
	        return client;
		} else
			return null;
		
	}
	
}
